#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//using namespace std;
//const int N = 1e5 + 10;
//int n;
//int son[N][26], cnt[N], idx;
//void insert(char str[])
//{
//    int p = 0;
//    for (int i = 0; str[i]; i++)
//    {
//        int u = str[i] - 'a';
//        if (!son[p][u]) son[p][u] = idx++;
//        p = son[p][u];
//    }
//    cnt[p]++;
//}
//int query(char str[])
//{
//    int p = 0;
//    for (int i = 0; str[i]; i++)
//    {
//        int u = str[i] - 'a';
//        if (!son[p][u])
//            return 0;
//        p = son[p][u];
//    }
//    return cnt[p];
//}
//int main()
//{
//    scanf("%d", &n);
//    while (n--)
//    {
//        char str[N];
//        char op[2];
//        scanf("%s%s", op, str);
//        if (*op == 'I')
//            insert(str);
//        else
//                printf("%d\n", query(str));
//    }
//    return 0;
//}
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int son[N][26], idx, q[N];
char str[N];
void insert(char* str)
{
    int p = 0;
    for (int i = 0; str[i]; i++)
    {
        int u = str[i] - 'a';
        if (!son[p][u]) son[p][u] = ++idx;
        p = son[p][u];
    }
    q[p] ++;
}
int query(char* str)
{
    int p = 0;
    for (int i = 0; str[i]; i++)
    {
        int u = str[i] - 'a';
        if (!son[p][u]) return 0;
        p = son[p][u];
    }
    return q[p];
}
int main()
{
    int m;
    scanf("%d", &m);
    while (m--)
    {
        char op[2];
        scanf("%s%s", op, str);
        if (op[0] == 'I')
            insert(str);
        else
            printf("%d\n", query(str));
    }
    return 0;
}